The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.
Computer systems may include a number of shared resources, such as memories, processors, storage units, network bandwidth, interfaces, and so forth. These resources are described as shared because they may be utilized by or on behalf of multiple logical or physical components of a computer system. For instance, in the context of a network switching device, usage of certain memory areas may be logically divided amongst different ports, queues, or other components of the device. Individual portions of these memory areas, referred to herein as buffers, may be utilized by or on behalf of device components to, for example, temporarily store network packets, cells, data frames, or other messages for processing. At a given time, each buffer may be classified as belonging to, being assigned to, or being utilized by one or more different physical or logical component of the networking device, such as a port, queue, group of ports, traffic class, and so forth. This classification will typically change over time, as the resource is repeatedly assigned, unassigned, and reassigned to different components for various purposes.
To minimize situations where usage of shared resources is inefficiently monopolized for certain functions, a computer system may include a resource management component for the shared resources. The resource management component may implement a variety of access control algorithms designed to optimize usage of a specific set of shared resources. For instance, the resource management component may allocate different amounts of a type of resource (e.g. a number of buffers, a memory size, a number of processors or threads, an amount of processor usage, bandwidth, etc.) for different objectives, and track the amounts of resources currently utilized for each objective. When additional resources are needed for an objective, beyond the amount already allocated for the objective, allocation of additional resources may be requested for the objective. When a resource is no longer needed, deallocation of the resource for the objective may be requested.
A resource management component may be configured to deny requests to allocate resources for certain objectives in certain situations. For example, the total number of resources that may be allocated to a given system component at a given instance of time may be limited by some threshold. Or, there may simply be no remaining resources available for allocation.
The task of resource management itself requires an amount of resources. For example, an amount of memory is required for accounting purposes, such as for tracking the current amount of resources utilized for each objective. Of course, as the number of objectives to which a type of resource may be assigned increases, the memory requirements also increase. Moreover, for certain types of usage patterns in certain types of computer systems, such as with respect to message buffers in network switching devices, the frequency with which resource assignments must be made requires that the memory used to track resource usage be capable of sustaining a high read and write rate. For instance, multi-ported memory is often required in such contexts, which can be of relatively high cost and reduced operating rate.